package org.shj.spring.boot.util;

import org.apache.commons.lang3.EnumUtils;
import org.apache.commons.lang3.math.NumberUtils;
import org.shj.spring.boot.util.StringUtil;

public class EnumUtil {

    public static <E> E parse(int ordinal, Class<E> enumClass) {
        if (enumClass != null && enumClass.isEnum()) {
            E[] enums = enumClass.getEnumConstants();
            if (enums.length > ordinal) {
                return enums[ordinal];
            }
        }
        return null;
    }

    public static <E extends Enum<E>> E parse(Object value, Class<E> enumClass) {
        if (value == null || enumClass == null || !enumClass.isEnum()) {
            return null;
        }
        String valueStr = StringUtil.toString(value);
        if (NumberUtils.isDigits(valueStr)) {
            return parse(Integer.parseInt(valueStr), enumClass);
        } else {
            return EnumUtils.getEnum(enumClass, valueStr);
        }
    }
}
